home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!dino!sharkey!mailrus!iuvax!rutgers!aramis.rutgers.edu!dartagnan.rutgers.edu!mcgrew
- From: mcgrew@dartagnan.rutgers.edu (Charles Mcgrew)
- Newsgroups: comp.sources.sun
- Subject: v01i038: Calctool, a calculator for your Sun, Part01/02
- Message-ID: <Jun.29.22.13.35.1989.12581@dartagnan.rutgers.edu>
- Date: 30 Jun 89 02:13:38 GMT
- Organization: Rutgers Univ., New Brunswick, N.J.
- Lines: 1332
- Approved: mcgrew@aramis.rutgers.edu
-
- Submitted-by: chuck@melmac.harris-atd.com (Chuck Musciano)
- Posting-number: Volume 1, Issue 38
- Archive-name: calctool/part01
-
- #! /bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #! /bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # README
- # Makefile
- # calc.b.14.uu
- # calc.r.7.uu
- # calc.icon
- # calctool.man
- # display.c
- # globals.c
- # globals.h
- # This archive created: Thu Jun 29 21:58:20 1989
- export PATH; PATH=/bin:$PATH
- echo shar: extracting "'README'" '(1133 characters)'
- if test -f 'README'
- then
- echo shar: will not over-write existing file "'README'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'README'
- XCalctool -- A scientific/programmer's calculator for Sun workstations
- X
- X Calctool is a windowed calculator suitable for Suns running SunOS
- X3.0 or higher, utilizing SunWindows and SunTools. The code is relatively
- Xstraightforward, and requires minimal modification to compile on most any
- XSun system.
- X
- X A glance at the Makefile will show that you should make sure that FONTDIR,
- XBINDIR, MANDIR, and MANEXT are correct for your site before making calctool.
- X
- X Calctool needs the font /usr/lib/fonts/fixedwidthfonts/gallant.r.19,
- Xso make sure that this font exists.
- X
- X The man page should explain most things. Calctool is loosely based upon
- XTI-type calculators, and uses an "Inverse" key to switch to alternate key
- Xfunctions. Calctool allows alternate functions to be reached directly by
- Xselecting keys with the middle mouse button, rather than the left mouse button.
- XRead the man page for more details.
- X
- X Enjoy, and please send any bugs or comments to
- X
- X Chuck Musciano
- X Advanced Technology Department
- X Harris Corporation
- X PO Box 37, MS 3A/1912
- X Melbourne, FL 32902
- X
- X (305) 727-6131
- X ARPA: chuck@trantor.harris-atd.com
- SHAR_EOF
- if test 1133 -ne "`wc -c < 'README'`"
- then
- echo shar: error transmitting "'README'" '(should have been 1133 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'Makefile'" '(1039 characters)'
- if test -f 'Makefile'
- then
- echo shar: will not over-write existing file "'Makefile'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'Makefile'
- X# where you keep local fonts, if any
- XFONTDIR = .
- X
- X# where you keep local executables
- XBINDIR = /usr/local/bin
- X
- X# man directory for local man pages (usually /usr/man/manl)
- XMANDIR = /usr/man/manl
- XMANEXT = l
- X
- XOFILES = display.o globals.o memory.o ops.o screen.o
- XFONTS = $(FONTDIR)/calc.b.14 $(FONTDIR)/calc.r.7
- X
- XWINDOW_LIB = -lsuntool -lsunwindow -lpixrect
- XMATH = -lm
- X
- X.c.o:
- X cc -O -c -DKEY_FONT=\"$(FONTDIR)/calc.b.14\" -DSTATUS_FONT=\"$(FONTDIR)/calc.r.7\" $*.c
- X
- Xcalctool: $(FONTS) $(OFILES)
- X cc -o calctool $(OFILES) $(WINDOW_LIB) $(MATH)
- X
- X$(FONTDIR)/calc.b.14: calc.b.14.uu
- X uudecode < calc.b.14.uu
- X mv temp $(FONTDIR)/calc.b.14
- X
- X$(FONTDIR)/calc.r.7: calc.r.7.uu
- X uudecode < calc.r.7.uu
- X mv temp $(FONTDIR)/calc.r.7
- X
- Xinstall: calctool
- X cp calctool $(BINDIR)
- X cp calctool.man $(MANDIR)/calctool.$(MANEXT)
- X
- Xclean:
- X rm *.o core
- X
- X# dependencies
- X
- Xdisplay.o: manifest.h globals.h keys.h
- X
- Xglobals.o: manifest.h globals.h
- X
- Xmemory.o: manifest.h globals.h
- X
- Xops.o: manifest.h globals.h keys.h
- X
- Xscreen.o: manifest.h globals.h keys.h calc.icon
- SHAR_EOF
- if test 1039 -ne "`wc -c < 'Makefile'`"
- then
- echo shar: error transmitting "'Makefile'" '(should have been 1039 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'calc.b.14.uu'" '(10805 characters)'
- if test -f 'calc.b.14.uu'
- then
- echo shar: will not over-write existing file "'calc.b.14.uu'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'calc.b.14.uu'
- Xbegin 644 temp
- XM 1X4B ) !( "0-!0 ) D ) D#04 "0 ) $@ ) T% D "0!L "0-
- XM!0 ) D D D#04 "0 ) +0 ) T% D "0#8 "0-!0 ) D _ D#04 "0 )
- XM 2 ) T% D "0%$ "0-!0 ) D!: D#04 "0 ) 8P ) T% D "0&P "0-
- XM!0 ) D!U D#04 "0 ) ?@ ) T% D "0(< "0-!0 ) D"0 D#04 "0 )
- XM F0 ) T% D "0*( "0-!0 ) D"K D#04 "0 ) M ) T% D "0+T "0-
- XM!0 ) D#& D#04 "0 ) SP ) T% D "0-@ "0-!0 ) D#A D#04 "0 )
- XM Z@ ) T% D "0/, "0-!0 ) D#\ D#04 "0 )!!0 ) T% D "00X "0-
- XM!0 ) D$7 D#04 "0 )!( ) T% D "02D "0-!0 ) D$R D#04 "0 )
- XM!.P ) T% D "040 "0-!0 ) D%- D#04 "0 )!5@ ) T% D "05\ "0-
- XM!0 ) D%H D#04 "0 )!<0 ) T% D "07H "0-!0 ) D D#04 "0 )
- XM!C ) T% D "094 "0-!0 ) D&> D#04 "0 )!IP ) T% D "0; "0-
- XM!0 ) D&Y D#04 "0 )!P@ ) T% D "0<L "0-!0 ) D'4 D#04 "0 )
- XM!W0 ) T% D "0>8 "0-!0 ) D'O D#04 "0 )!^ ) T% D "0@$ "0-
- XM!0 ) D(* D#04 "0 )"$P ) T% D "0AP "0-!0 ) D(E D#04 "0 )
- XM"+@ ) T% D "0C< "0-!0 ) D) D#04 "0 )"20 ) T% D "0E( "0-
- XM!0 ) D); D#04 "0 )"9 ) T% D "0FT "0-!0 ) D)V D#04 "0 )
- XM"?P ) T% D "0H@ "0-!0 ) D*1 D#04 "0 )"F@ ) T% D "0J, "0-
- XM!0 ) D*L D#04 "0 )"M0 ) T% D "0KX "0-!0 ) D+' D#04 "0 )
- XM"T ) T% D "0MD "0-!0 ) D+B D#04 "0 )"ZP ) T% D "0O0 "0-
- XM!0 ) D+] D#04 "0 )#!@ ) T% D "0P\ "0-!0 ) D,8 D#04 "0 )
- XM#(0 ) T% D "0RH "0-!0 ) D,S D#04 "0 )#/ ) T% D "0T4 "0-
- XM!0 ) D-. D#04 "0 )#5P ) T% D "0V "0-!0 ) D-I D#04 "0 )
- XM#<@ ) T% D "0WL "0-!0 ) D.$ D#04 "0 )#C0 ) T% D "0Y8 "0-
- XM!0 ) D.? D#04 "0 )#J ) T% D "0[$ "0-!0 ) D.Z D#04 "0 )
- XM#PP ) T% D "0\P "0-!0 ) D/5 D#04 "0 )#W@ ) T% D "0^< "0-
- XM!0 ) D/P D#04 "0 )#^0 ) T% D "1 ( "0-!0 ) D0+ D#04 "0 )
- XM$% ) T% D "1!T "0-!0 ) D0F D#04 "0 )$+P ) T% D "1#@ "0-
- XM!0 ) D1! D#04 "0 )$2@ ) T% D "1%, "0-!0 ) D1< D#04 "0 )
- XM$90 ) T% D "1&X "0-!0 ) D1W D#04 "0 )$@ ) T% D "1(D "0-
- XM!0 ) D22 D#04 "0 )$FP ) T% D "1*0 "0-!0 ) D2M D#04 "0 )
- XM$M@ ) T% D "1+\ "0-!0 ) D3( D#04 "0 )$T0 ) T% D "1-H "0-
- XM!0 ) D3C D#04 "0 )$[ ) T% D "1/4 "0-!0 ) D3^ D#04 "0 )
- XM%!P ) T% D "11 "0-!0 ) D49 D#04 "0 )
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM #@
- XM. X #@ . X #@ . X #@ . X #@ . X #@ . #@ . X #@ . X
- XM #@ . X #@ . X #@ . X #@ . #@ . X #@ . X #@ . X #@
- XM. X #@ . X #@ . #@ . X #@ . X #@ . X #@ . X #@ . X
- XM #@ . #@ . X #@ . X #@ . X #@ . X #@ . X #@ .
- XM
- XM
- XM #\ 'X _ !^ /P ?@#\ 'X _ !^ /P ?@#\ 'X _ !^
- XM /P ?@#^ /X _@#^ /X _@#^ /X _@#^ /X _@#^ /X _@#^ /X _@ X #@
- XM. X #@ . X #@ . X #@ . X #@ . X #@ . X #@ . X #@ . X
- XM #@ . X #@ . X #@ . X #@ .
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM #@ . X #@ . X #@ . X #@ . X #@ . X
- XM #@ . #@ . X #@ . X #@ . X #@ . X #@ . X #@ . #@
- XM. X #@ . X #@ . X #@ . X #@ . X #@ . #@ . X #@ . X
- XM #@ . X #@ . X #@ . X #@ . #@ . X #@ . X #@ . X #@
- XM. X #@ . X #@ . #@ . X #@ . X #@ . X #@ . X #@ . X
- XM #@ . 'X
- XM_ !^ /P ?@#\ 'X _ !^ /P ?@#\ 'X _ !^ /P ?@
- XM !@ & 8 !@ & 8 !@
- XM 8 !@ #8 -@ V #8
- XM !L &P ; '^ -@ V /\ ; !L &P
- XM ( #X :P!K &L . . &L :P!K #X " '8 E@"<
- XM .P & 8 #< .0!I &X #@ ; !L #@ , ![ -X
- XMS #< '< P # 8 #
- XM & P & 8 # , P # , 8 !@ # &
- XM P !@ # , 8 !@ & 8 !@ , P & P & !:
- XM 'X / !^ %H & & 8 !@ _P#_ !@
- XM& 8 8 !@ " 0
- XM " ?P!_
- XM 8 !@ # 8 !@ ,
- XM P & 8 # , !@ & P #X 8P!G &< :P!K ',
- XM<P!C #X P ' \ P # , P # , #\
- XM #X 8P!C , !@ , !@ , !A '\
- XM #X 8P!C , '@ ' , 8P!C #X ( !@ .
- XM !X -@!F ,8 _P & 8 '\ 8 !@ 'X P # ,
- XM8P!C #X #X 8P!@ & ?@!C &, 8P!C #X
- XM '\ 0P!# 8 !@ , P & 8 !@
- XM #X 8P!C &, /@!C &, 8P!C #X #X 8P!C
- XM &, 8P _ , P!C #X !@ &
- XM 8 !@ !@ & 8 !@ " 0
- XM " # 8 # 8 # 8 P !@ # & ,
- XM !_ '\ '\ ?P !@ # & ,
- XM 8 P & P & P & #X 8P!C , !@ , P
- XM , P !P -@!C &\ :P!K &X 8 S !X
- XM @ ' < #8 -@ V &, ?P!C &,
- XM 'P 9@!F &8 ? !F &, 8P!C 'X #X 8P!C
- XM & 8 !@ & 8P!C #X 'P 9@!C &, 8P!C &,
- XM8P!F 'P '\ 8 !@ & ?@!@ & 8 !@ '\
- XM '\ 8 !@ & ?@!@ & 8 !@ &
- XM #X 8P!C & 8 !G &, 8P!G #T &, 8P!C
- XM &, ?P!C &, 8P!C &, 'X & 8 !@ & 8 !@
- XM& 8 'X !\ !@ & 8 !@ & 8 9@!F #P
- XM &, 9@!L '@ ? !L &8 9@!C &,
- XM & 8 !@ & 8 !@ & 8 !@ '\ ,, PP#G
- XM .< _P#; -L PP## ,, &, 8P!S ', >P!K &\
- XM9P!G &, #X 8P!C &, 8P!C &, 8P!C #X
- XM 'X 8P!C &, 8P!^ & 8 !@ &
- XM #X 8P!C &, 8P!C &, 8P!C #X & , < 'X 8P!C
- XM &, ?@!L &8 9@!C &, #X 8P!C # ' & ,
- XM8P!C #X /\ & 8 !@ & 8 !@ & 8 !@
- XM &, 8P!C &, 8P!C &, 8P!C #X
- XM &, 8P!C #8 -@ V !P ' ( @ ,& R8#)
- XM@-V 70!W '< -@ B "( &, 8P V #8 ' < #8
- XM-@!C &, ,, PP!F &8 / 8 !@ & 8 !@
- XM '\ P # 8 # 8 # 8 !@ '\
- XM ^ # , P # , P # , P # , ^ # & 8 P
- XM # & 8 P # & 8 P ^ 8 !@ & 8 !@ & 8
- XM!@ & 8 !@ ^ @ ' V &,
- XM _P#_
- XM # , 8 P
- XM #P 9@ & #X 9@!F #\ & 8 !@ &X <P!C &,
- XM8P!S &X #X 8P!@ & 8 !C #X
- XM , P # #L 9P!C &, 8P!G #L
- XM #X 8P!C '\ 8 !C #X X &P 8
- XM !@ ?@ 8 !@ & 8 !@ #L 9P!C &,
- XM8P!G #L P!C #X & 8 !@ &X <P!C &, 8P!C &,
- XM P # #P # , P # , P
- XM 8 !@ !X !@ & 8 !@ & 8 !@!F #P & 8 !@
- XM &8 ; !X '@ ; !F &, #P # , P # , P
- XM# , P +8 VP#; -L VP#; -L
- XM %X <P!C &, 8P!C &,
- XM #X 8P!C &, 8P!C #X
- XM &X <P!C &, 8P!S &X 8 !@ & 8 #L 9P!C &,
- XM8P!G #L P # , P &X >P!@ & 8 !@ &
- XM #X 8P!@ #X P!C #X
- XM !@ & 8 'X & 8 !@ & ; X
- XM &, 8P!C &, 8P!G #L &, 8P V #8
- XM' < @ ,, PP#; -L VP#; 'X
- XM &8 9@ \ !@ / !F &8
- XM &, 8P S #8 %@ < P # !( '@ ,
- XM '\ !@ , !@ , !@ '\ / !@ & 8 !@ & !P !@
- XM& 8 !@ & / 8 !@ & 8 !@ & !@ & 8 !@ & 8
- XM !X P # , P # ' P # , P # !X
- XM .P!_ &X #P -@ V #P
- XM -@ V X &P ; !L &P . &8 9@ \ !@ / !F &8
- XM #_ /\ &8 9@ \ !@ / !F &8
- XM @ " 8 !@ , P!F &8 / \ !@ & !$ &P
- XM. X@&R 18 !@ , P!F &8 / \ !@ & #_@/^
- XM &, 8P S #8 %@ < P # !( '@ , 8 #@#F .8 !@ & \
- XM #@ ; , !@ , !@ 'P
- XM 0!_ /X 9@!F &8 9@!F &8 P
- XM' , P # , !X ( !@ , !@ , !@ , @ , !@ , !@ , !@
- XM , @ S #, '@ , !X ,P S !@ & 8 /\ _P 8 !@ &( !@ ,
- XM!@ , !@ , !@ $ , !@ , !@ , !@ , @ '\ ?P
- XM & 8 _P#_ & 8
- XM ? #\ < !@ & 8 !@ &0 9@!S #^ 'X # 8 ! 0 # 8 #\ /X 9P S
- XM !, P # , P ' 'X ? $ 8 P ?@#^ <P!F &0 8 !@ &
- XM8 !P #\ 'P !\ 'X !P # , P # !, ,P!G /X _ !@
- XI # $ # , P ?X!_@ P # , '^ ?X
- X
- Xend
- SHAR_EOF
- if test 10805 -ne "`wc -c < 'calc.b.14.uu'`"
- then
- echo shar: error transmitting "'calc.b.14.uu'" '(should have been 10805 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'calc.r.7.uu'" '(5073 characters)'
- if test -f 'calc.r.7.uu'
- then
- echo shar: will not over-write existing file "'calc.r.7.uu'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'calc.r.7.uu'
- Xbegin 644 temp
- XM 1X$2 & @ @& @ & 8 " (!@( !@ & ! " 8" 8 !@ 8 @&
- XM @ & 8 ( (!@( !@ & "@ " 8" 8 !@ P @& @ & 8 . (!@( !@ &
- XM $ " 8" 8 !@!( @& @ & 8 4 (!@( !@ & %@ " 8" 8 !@!@ @&
- XM @ & 8 : (!@( !@ & ' " 8" 8 !@!X @& @ & 8 @ (!@( !@ &
- XM (@ " 8" 8 !@"0 @& @ & 8 F (!@( !@ & * " 8" 8 !@"H @&
- XM @ & 8 L (!@( !@ & +@ " 8" 8 !@# @& @ & 8 R (!@( !@ &
- XM - " 8" 8 !@#8 @& @ & 8 X (!@( !@ & .@ " 8" 8 !@#P @&
- XM @ & 8 ^ (!@( !@ & 0 " 8" 8 !@$( @& @ & 8!$ (!@( !@ &
- XM 1@ " 8" 8 !@$@ @& @ & 8!* (!@( !@ & 3 " 8" 8 !@$X @&
- XM @ & 8!0 (!@( !@ & 4@ " 8" 8 !@%0 @& @ & 8!6 (!@( !@ &
- XM 6 " 8" 8 !@%H @& @ & 8!< (!@( !@ & 7@ " 8" 8 !@& @&
- XM @ & 8!B (!@( !@ & 9 " 8" 8 !@&8 @& @ & 8!H (!@( !@ &
- XM :@ " 8" 8 !@&P @& @ & 8!N (!@( !@ & < " 8" 8 !@'( @&
- XM @ & 8!T (!@( !@ & =@ " 8" 8 !@'@ @& @ & 8!Z (!@( !@ &
- XM ? " 8" 8 !@'X @& @ & 8" (!@( !@ & @@ " 8" 8 !@(0 @&
- XM @ & 8"& (!@( !@ & B " 8" 8 !@(H @& @ & 8", (!@( !@ &
- XM C@ " 8" 8 !@) @& @ & 8"2 (!@( !@ & E " 8" 8 !@)8 @&
- XM @ & 8"8 (!@( !@ & F@ " 8" 8 !@)P @& @ & 8"> (!@( !@ &
- XM H " 8" 8 !@*( @& @ & 8"D (!@( !@ & I@ " 8" 8 !@*@ @&
- XM @ & 8"J (!@( !@ & K " 8" 8 !@*X @& @ & 8"P (!@( !@ &
- XM L@ " 8" 8 !@+0 @& @ & 8"V (!@( !@ & N " 8" 8 !@+H @&
- XM @ & 8"\ (!@( !@ & O@ " 8" 8 !@, @& @ & 8#" (!@( !@ &
- XM Q " 8" 8 !@,8 @& @ & 8#( (!@( !@ & R@ " 8" 8 !@,P @&
- XM @ & 8#. (!@( !@ & T " 8" 8 !@-( @& @ & 8#4 (!@( !@ &
- XM U@ " 8" 8 !@-@ @& @ & 8#: (!@( !@ & W " 8" 8 !@-X @&
- XM @ & 8#@ (!@( !@ & X@ " 8" 8 !@.0 @& @ & 8#F (!@( !@ &
- XM Z " 8" 8 !@.H @& @ & 8#L (!@( !@ & [@ " 8" 8 !@/ @&
- XM @ & 8#R (!@( !@ & ] " 8" 8 !@/8 @& @ & 8#X (!@( !@ &
- XM ^@ " 8" 8 !@/P @& @ & 8#^ (!@( !@ &! " 8" 8 !@0( @&
- XM @ & 8$$ (!@( !@ &!!@ " 8" 8 !@0@ @& @ & 8$* (!@( !@ &
- XM!# " 8" 8 !@0X @& @ & 8$0 (!@( !@ &
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM ?$141'P ! 0$%0X$ T2$@T 8)#@D)#@@ 0*$0
- XM !\! 0 '" X(!P !\*"@H) 0" 0*$1$ "J5:I5JE6J5?______
- XM____P,# P,# P, # P,# P,# SA 6%0X%!0 "A45%0H P"!PD)!@ \
- XM0$ \ '@$!'@ 8)"0D)"0 "0D)"0D& 1$1\1"@0 !\!!P$!'P
- XM X5&Q4. H?"@ !\ 0"'P($ "!4" $"'P0
- XM?"! ($" 0"#P ! (! @0/ ? !\ 'P !$*! 0
- XM$! 0 ! "@H* *'PH*'PH 0/% X%'@0 'QD"! L3 ,% @5$AT
- XM ("! ! @0$! (! (! (" @0( 5#AL.%0 0$'P0$
- XM ! 0( !X 0$ "! 0("! P2%AH2# ! P$! 0.
- XM,$@(,$!X P2! (2# ! P4'@0$ >$!P"$@P P0'!(2# '@($! @
- XM( ,$@P2$@P P2$@X"# 0$ 0$ " @ " @0 "! @$ @
- XM> !X " 0"! @ P2 @P " #A$7%Q . ,$A(>$A( !P2'!(2'
- XM #!(0$!(, <$A(2$AP !X0'! 0'@ 'A <$! 0 ,$A 6$@P !(2'A(
- XM2$@ #@0$! 0. . @("$@P !$2%!P2$0 $! 0$! > 1&Q45$1$ !$
- XM9%1,1$0 #!(2$A(, <$A(<$! X1$143#@$ '!(2'!02 ,$@@$$@P
- XM !\$! 0$! $A(2$A(, 1$1$*"@0 !$1%14;$0 $0H$"A$1 1$0X
- XM$! 0 !X"! @0'@ #@@(" @(#@ 0" @$! ( X" @(" @X ! H1
- XM > 0$ @ P"#A(* 0'!(2$AP .$! 0#@ @X2$A(
- XM. #!(<$ X 8(' @(" X2$@X"' 0%!H2$A( 0 # 0$! !
- XM,! 0$& 0$A08%!( P$! 0$! !H5%145 %!H2$A( ,$A(2#
- XM !0:$AH4$ "A82%@H" 4&A 0$ X0# (< ('@@(" 8 2$A(
- XM6"@ !$1"@H$ $1$5%0H 1"@0*$0 !(2$@X"' '@($"!X 8
- XM("! (" 8 ! 0$! 0$! 8! 0"! 08 (%0( 'Q\?'Q\?'P )$B0D$@D
- XM "02"0D2) '"(B)R(8 .$1$Y$0( !0Z$0$Z! 0 'P $ % @4
- X5H*!@(,"@1*0(:"@0 #X %!0,!!@
- X
- Xend
- SHAR_EOF
- if test 5073 -ne "`wc -c < 'calc.r.7.uu'`"
- then
- echo shar: error transmitting "'calc.r.7.uu'" '(should have been 5073 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'calc.icon'" '(1485 characters)'
- if test -f 'calc.icon'
- then
- echo shar: will not over-write existing file "'calc.icon'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'calc.icon'
- X/* Format_version=1, Width=48, Height=64, Depth=1, Valid_bits_per_item=16
- X */
- X 0xBFFF,0xFFFF,0xFFFA,0x6000,0x0000,0x000C,
- X 0xC000,0x0000,0x0006,0x8000,0x0000,0x0002,
- X 0x8FFF,0xFFFF,0xFFE2,0x8800,0x0000,0x0022,
- X 0x884E,0xEAEE,0xEE22,0x8842,0x2A88,0x2A22,
- X 0x884E,0x6EEE,0x2E22,0x8848,0x222A,0x2A22,
- X 0x884E,0xE2EE,0x2E22,0x8800,0x0000,0x0022,
- X 0x8FFF,0xFFFF,0xFFE2,0x8000,0x0000,0x0002,
- X 0x8000,0x0000,0x0002,0x8000,0x0000,0x0002,
- X 0x8FFB,0xFEFF,0xBFE2,0x880A,0x0280,0xA022,
- X 0x89CA,0x729C,0xA8A2,0x884A,0x5294,0xA522,
- X 0x884A,0x729C,0xA222,0x884A,0x5284,0xA522,
- X 0x884A,0x729C,0xA8A2,0x880A,0x0280,0xA022,
- X 0x8FFB,0xFEFF,0xBFE2,0x8000,0x0000,0x0002,
- X 0x8000,0x0000,0x0002,0x8FFB,0xFEFF,0xBFE2,
- X 0x880A,0x0280,0xA022,0x894A,0x729C,0xA222,
- X 0x894A,0x4290,0xA022,0x89CA,0x729C,0xAFA2,
- X 0x884A,0x1294,0xA022,0x884A,0x729C,0xA222,
- X 0x880A,0x0280,0xA022,0x8FFB,0xFEFF,0xBFE2,
- X 0x8000,0x0000,0x0002,0x8000,0x0000,0x0002,
- X 0x8FFB,0xFEFF,0xBFE2,0x880A,0x0280,0xA022,
- X 0x888A,0x729C,0xA222,0x888A,0x1284,0xA222,
- X 0x888A,0x728C,0xAFA2,0x888A,0x4284,0xA222,
- X 0x888A,0x729C,0xA222,0x880A,0x0280,0xA022,
- X 0x8FFB,0xFEFF,0xBFE2,0x8000,0x0000,0x0002,
- X 0x8000,0x0000,0x0002,0x8FFB,0xFEFF,0xBFE2,
- X 0x880A,0x0280,0xA022,0x89CA,0x7280,0xA022,
- X 0x890A,0x529C,0xA022,0x890A,0x5280,0xAFA2,
- X 0x890A,0x529C,0xA022,0x89CA,0x7280,0xA022,
- X 0x880A,0x0280,0xA022,0x8FFB,0xFEFF,0xBFE2,
- X 0x8000,0x0000,0x0002,0x8000,0x0000,0x0002,
- X 0x8000,0x0000,0x0002,0x4000,0x0000,0x0004,
- X 0xA000,0x0000,0x000A,0x5FFF,0xFFFF,0xFFF4
- SHAR_EOF
- if test 1485 -ne "`wc -c < 'calc.icon'`"
- then
- echo shar: error transmitting "'calc.icon'" '(should have been 1485 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'calctool.man'" '(7307 characters)'
- if test -f 'calctool.man'
- then
- echo shar: will not over-write existing file "'calctool.man'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'calctool.man'
- X.TH CALCTOOL 1 "21 November 1986"
- X.SH NAME
- Xcalctool \- desktop calculator
- X.SH SYNOPSIS
- X\fBcalctool\fP
- X.SH DESCRIPTION
- X.LP
- X\f2Calctool\fP is desktop calculator which runs under \f2suntools\fP(1).
- XUsers interact with \f2calctool\fP using the mouse and keyboard as
- Xdescribed below. \f2Calctool\fP honors the standard window command line
- Xoptions.
- X.LP
- X\f2Calctool\fP can be used as a scientific calculator, providing the
- Xstandard trigonometric and transcendental functions, or it can be used as
- Xa programmer's calculator, allowing bitwise manipulation of binary, octal,
- Xand hexadecimal values. All internal values in \f2calctool\fP are maintained
- Xusing double precision floating point.
- X.SH "USER INTERFACE"
- X.sp
- X.SH "The Display"
- X.LP
- X\f2Calctool\fP presents the user with a keyboard and a display area. The
- Xdisplay area displays the results of calculations, and a status line
- Xshowing information about the current mode of \f2calctool\fP. The left portion
- Xof the status line displays the operator stack, allowing the user to track
- Xpending operations as \f2calctool\fP stacks them. The middle of the display
- Xline shows the current trigonometric mode, either \*(lqDeg\*(rq, \*(lqRad\*(rq,
- Xor \*(lqGrad\*(rq. To the right of the trigonometric mode, either \*(lqEE\*(rq
- Xor \*(lqEng\*(rq will appear when the calculator is in scientific exponential
- Xor engineering exponential mode. The right portion shows the current display precision,
- Xindicating the number of decimal digits shown (in scientific mode) or the
- Xnumber of bits shown (in programmer mode).
- X.LP
- XIn scientific or enigneering mode, the value in the display is presented in fixed point notation if it
- Xis small enough, or is converted to scientific notation if not. In programmer
- Xmode, the value is presented as a bit string in the appropriate base. The
- X\f3Fix\fP and \f3EE\fP keys, below, control the precision and format of the display.
- X.SH "The Keyboard"
- X.LP
- XThe various keys on the keyboard are, for the most part, self-explanatory.
- XKeys are \*(lqpressed\*(rq by clicking the left mouse button on the key.
- XSome keys also have inverted functions, which are accessed by first
- Xclicking the \f3Inverse\fP key, and then clicking the desired inverse
- Xfunction. Clicking the \f3Inverse\fP key causes the inverse functions
- Xto be displayed. Those keys without inverse functions are grayed out.
- X.LP
- XA shortcut method is provided to access inverse functions. Clicking the
- Xmiddle button on a key accesses its inverse function directly, without
- Xpressing the \f3Inverse\fP key first. Pressing and holding the middle button
- Xon a key will preview its inverse function; releasing the middle button
- Xwill activate the inverse function.
- X.LP
- XSeveral keys on the keyboard have special functions associated with them.
- XThese keys are:
- X.IP "\f3Sto\fP, \f3Rcl\fP, \f3Exc\fP"
- XWhen accessed with the left button, these keys access memory 0 of \f2calctool\fP.
- XIf more memories are desired, they can be accessed by pressing the right
- Xbutton on the desired key. A menu will pop up, showing the various memories
- Xcurrently in use. In the case of the \f3Rcl\fP or \f3Exc\fP keys, selecting a memory
- Xwill cause that memory to be recalled to, or exchanged with, the value in the
- Xdisplay. The \f3Sto\fP key works in a similar manner, except that an additional
- Xentry, \*(lqNew Memory\*(rq, is also provided. Selecting \*(lqNew Memory\*(rq
- Xcauses a new memory to be created, containing the value in the display. Up to
- X42 memories (0 through 41) can be created in this manner.
- X.IP "\f3Fix\fP, \f3DRG\fP"
- XThe \f3Fix\fP key is visible in normal scientific or programmer mode, while the
- X\f3DRG\fP key is visible in inverted scientific mode. When accessed with the
- Xleft and middle buttons, these keys cycle through the various display modes.
- XIn scientific mode, the \f3Fix\fP key cycles through 0 to 12 digits, and floating,
- Xprecision. This value determines the number of digits which follow the decimal
- Xpoint in the display. In programmer mode, the \f3Fix\fP key cycles through
- Xthe available bit widths, which for binary is 4, 8, or 16 bits, and for octal
- Xand hexadecimal is 8, 16, or 32 bits. The \f3DRG\fP key cycles among the
- Xdegrees, radians, and grads trigonometric modes, which determines how the
- Xtrigonometric functions will accept and display their arguments.
- X.IP
- XEither of these keys cycles when clicked with the left button, and displays a
- Xmenu when clicked with the right button.
- X.IP "\f3Scientific\fP, \f3Binary\fP, \f3Octal\fP, \f3Hexadecimal\fP"
- XThis large key cycles between the various calculator modes. Clicking with the
- Xleft button cycles through the four modes, while the right button displays a
- Xmenu of the various modes. When switching from one mode to another, the
- Xdisplay is modified to reflect the new mode. The \f2internal value\fP of
- Xthe display is not changed until that value is used. For example, if the current
- Xvalue in the display is \*(lq14.5\*(rq, selecting hexadecimal mode will cause the
- Xdisplay to read \*(lqD\*(rq. However, the internal value is still 14.5.
- XReturning to scientific mode will restore the display to \*(lq14.5\*(rq. If,
- Xwhile in hexadecimal mode, 1 was added to the display, (displaying \*(lqE\*(rq),
- Xreturning to scientific mode would display \*(lq15\*(rq, since hexadecimal mode
- Xtruncated the display before using it.
- X.IP \f3EE\fP
- XThis key places the calculator in exponential mode, which causes all results
- Xto be displayed in scientific notation. In scientific mode, normal
- Xscientific notation is used. In engineering mode, the exponent is
- Xadjusted to a multiple of three. To return to normal display mode,
- Xclick \f3Inverse\fP \f3EE\fP. This key also allows the user to enter
- Xexponents when keying in a value. Clicking \f3EE\fP once allows the user to
- Xenter the exponent value. Clicking again returns the user to entering the
- Xmantissa.
- X.IP "\f3Erase\fP, \f3Clear\fP"
- XThe \f3Erase\fP key erases the currently displayed value and replaces it
- Xwith zero. The \f3Clear\fP key erases the display, the internal value stack,
- Xand the internal operator stack. The \f3Clear\fP key can be accessed by
- Xclicking the \f3Erase\fP key with the middle mouse button.
- X.SH "Typing Values"
- X.LP
- XInstead of clicking keys, the user can type values directly on the keyboard.
- X\f2Calctool\fP will recognize the digits \*(lq0\*(rq through \*(lq9\*(rq, and \*(lqA\*(rq through \*(lqF\*(rq in
- Xhexadecimal mode. In scientific mode, the \*(lqE\*(rq key acts like the
- X\f3EE\fP key
- Xand the \*(lq.\*(rq key acts like the decimal point key.
- XThe \*(lq+\*(rq, \*(lq-\*(rq, \*(lq*\*(rq, and \*(lq/\*(rq keys correspond to addition, subtraction,
- Xmultiplication, and division, and \*(lq(\*(rq, \*(lq)\*(rq, and \*(lq=\*(rq perform the expected function.
- XIn addition, the \*(lqS\*(rq, \*(lqR\*(rq, and \*(lqG\*(rq keys correspond to the store, recall and
- Xexchange functions. The \*(lqX\*(rq key is equivalent to \*(lq*\*(rq, and carriage return and newline
- Xact like the \*(lq=\*(rq key.
- X.SH AUTHOR
- X.LP
- XChuck Musciano
- X.br
- XAdvanced Technology Department
- X.br
- XHarris Corporation
- X.br
- XPO Box 37, MS 3A/1912
- X.br
- XMelbourne, FL 32909
- X.br
- X(305) 727-6131
- X.br
- XARPA: chuck@trantor.harris-atd.com
- X.SH BUGS
- X.LP
- XKeystrokes are ignored when the mouse is positioned in the \f3Scientific\fP
- Xkey.
- X.LP
- XThere is no way to effect the \f3+/-\fP key from the keyboard.
- SHAR_EOF
- if test 7307 -ne "`wc -c < 'calctool.man'`"
- then
- echo shar: error transmitting "'calctool.man'" '(should have been 7307 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'display.c'" '(19031 characters)'
- if test -f 'display.c'
- then
- echo shar: will not over-write existing file "'display.c'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'display.c'
- X/************************************************************************/
- X/* Copyright 1988 by Chuck Musciano and Harris Corporation */
- X/* */
- X/* Permission to use, copy, modify, and distribute this software */
- X/* and its documentation for any purpose and without fee is */
- X/* hereby granted, provided that the above copyright notice */
- X/* appear in all copies and that both that copyright notice and */
- X/* this permission notice appear in supporting documentation, and */
- X/* that the name of Chuck Musciano and Harris Corporation not be */
- X/* used in advertising or publicity pertaining to distribution */
- X/* of the software without specific, written prior permission. */
- X/* Chuck Musciano and Harris Corporation make no representations */
- X/* about the suitability of this software for any purpose. It is */
- X/* provided "as is" without express or implied warranty. */
- X/************************************************************************/
- X
- X/************************************************************************/
- X/* */
- X/* Module: display.c */
- X/* */
- X/* Function: Manage calculator display */
- X/* */
- X/* Public Names: update_display resolve stack top and display */
- X/* convert_display convert user entry to stack top */
- X/* convert_value convert value to string */
- X/* fix_proc handle display widths */
- X/* do_digit handle digit input */
- X/* clear_entry clear any typed digits */
- X/* keyboard handle keyboard entries */
- X/* */
- X/* Change History: 17 Nov 86 Creation */
- X/* */
- X/************************************************************************/
- X
- X#include <stdio.h>
- X
- X#include <suntool/sunview.h>
- X#include <suntool/panel.h>
- X#include <suntool/canvas.h>
- X
- X#include "manifest.h"
- X#include "globals.h"
- X#include "keys.h"
- X
- X#define DIGIT_FONT "/usr/lib/fonts/fixedwidthfonts/gallant.r.19"
- X
- X#define margin(x) (((curr_mode == SCIENTIFIC? 15 : 16) - strlen(x)) * DIGIT_WIDTH)
- X
- X#define MAX_DIGITS ((curr_mode == SCIENTIFIC)? 14 : 16)
- X#define DIGIT_WIDTH d_font->pf_defaultsize.x
- X#define DIGIT_HEIGHT d_font->pf_defaultsize.y
- X#define STATUS_WIDTH s_font->pf_defaultsize.x
- X#define STATUS_HEIGHT s_font->pf_defaultsize.y
- X
- XPUBLIC double atof();
- XPUBLIC char *index();
- X
- XPUBLIC Canvas display;
- XPUBLIC Panel keys;
- XPUBLIC struct pixfont *key_font;
- X
- XPRIVATE Pixwin *pw = NULL;
- XPRIVATE struct pixfont *d_font = NULL;
- XPRIVATE struct pixfont *s_font = NULL;
- XPRIVATE char e_str[5], d_str[18];
- XPRIVATE int e_len = 0;
- XPRIVATE int d_len = 0;
- XPRIVATE int pw_width;
- XPRIVATE int pw_height;
- XPRIVATE char *digit = "0123456789ABCDEF.E-";
- X
- XPRIVATE verify(source, valid)
- X
- Xchar *source;
- Xchar *valid;
- X
- X{ register char *s;
- X
- X for ( ; *source; source++) {
- X for (s = valid; *s && *s != *source; s++)
- X ;
- X if (*s == '\0')
- X return(FALSE);
- X }
- X return(TRUE);
- X}
- X
- XPRIVATE convert_stacktop()
- X
- X{ char buf[60], *p;
- X
- X convert_value(v_stack[v_top], buf);
- X if (curr_mode == SCIENTIFIC && (p = index(buf, 'E')) != NULL) {
- X strcpy(e_str, p + 1);
- X if (*e_str == '+')
- X strcpy(e_str, e_str + 1);
- X e_len = strlen(e_str);
- X if (e_len == 2) {
- X e_str[3] = '\0';
- X e_str[2] = e_str[1];
- X e_str[1] = e_str[0];
- X e_str[0] = '0';
- X e_len = 3;
- X }
- X else if (e_len == 3 && *e_str == '-') {
- X e_str[4] = '\0';
- X e_str[3] = e_str[2];
- X e_str[2] = e_str[1];
- X e_str[1] = '0';
- X e_len = 4;
- X }
- X *p = '\0';
- X }
- X else {
- X *e_str = '\0';
- X e_len = 0;
- X }
- X strcpy(d_str, buf);
- X d_len = strlen(d_str);
- X}
- X
- XPUBLIC update_display()
- X
- X{ char buf[60], *p, *op_str();
- X int i, w;
- X static char *tm[] = {"Deg ", "Rad ", "Grad"};
- X
- X if (d_font == NULL)
- X if ((d_font = pf_open(DIGIT_FONT)) == NULL) {
- X fprintf(stderr, "calctool: could not open font %s\n", DIGIT_FONT);
- X exit(1);
- X }
- X if (s_font == NULL)
- X if ((s_font = pf_open(STATUS_FONT)) == NULL) {
- X fprintf(stderr, "calctool: could not open font %s\n", DIGIT_FONT);
- X exit(1);
- X }
- X if (pw == NULL) {
- X pw = canvas_pixwin(display);
- X pw_width = (int) window_get(display, WIN_WIDTH);
- X pw_height = (int) window_get(display, WIN_HEIGHT);
- X }
- X for (i = w = 0; i < o_top && w < 23; w += strlen(op_str(o_stack[i++])))
- X pw_text(pw, w * STATUS_WIDTH + 1, 7, PIX_SRC, s_font, op_str(o_stack[i]));
- X for ( ; w < 23; w++)
- X pw_text(pw, w * STATUS_WIDTH + 1, 7, PIX_SRC, s_font, " ");
- X pw_text(pw, 23 * STATUS_WIDTH, 7, PIX_SRC, s_font, (curr_mode == SCIENTIFIC)? tm[trig_mode] : " ");
- X if (curr_mode == SCIENTIFIC && ee_mode)
- X pw_text(pw, 28 * STATUS_WIDTH, 7, PIX_SRC, s_font, eng_mode? "Eng " : "EE ");
- X else
- X pw_text(pw, 28 * STATUS_WIDTH, 7, PIX_SRC, s_font, " ");
- X if (curr_mode == SCIENTIFIC)
- X if (curr_width[0] == -1)
- X strcpy(buf, " Float");
- X else
- X sprintf(buf, "%2d Digits", curr_width[0]);
- X else
- X sprintf(buf, " %2d Bits", curr_width[index_of(curr_base)]);
- X pw_text(pw, 32 * STATUS_WIDTH, 7, PIX_SRC, s_font, buf);
- X if (d_len > 0) {
- X if (e_len > 0) {
- X pw_text(pw, pw_width - 6 * DIGIT_WIDTH, 26, PIX_SRC, d_font, " e");
- X pw_text(pw, pw_width - 4 * DIGIT_WIDTH, 26, PIX_SRC, d_font, e_str);
- X if (e_len == 3)
- X pw_text(pw, pw_width - DIGIT_WIDTH, 26, PIX_SRC, d_font, " ");
- X }
- X else
- X pw_text(pw, pw_width - 6 * DIGIT_WIDTH, 26, PIX_SRC, d_font, " ");
- X pw_rop(pw, 0, pw_height - DIGIT_HEIGHT + 1, margin(d_str), DIGIT_HEIGHT, PIX_SRC | PIX_COLOR(0), NULL, 0, 0);
- X pw_text(pw, margin(d_str), 26, PIX_SRC, d_font, d_str);
- X }
- X else {
- X convert_value(v_stack[v_top], buf);
- X if (strcmp(buf, "NaN") == 0) {
- X strcpy(buf, " Error! ");
- X pw_text(pw, pw_width - 6 * DIGIT_WIDTH, 26, PIX_SRC, d_font, " ");
- X }
- X else if (curr_mode == SCIENTIFIC && (p = index(buf, 'E')) != NULL) {
- X pw_text(pw, pw_width - 6 * DIGIT_WIDTH, 26, PIX_SRC, d_font, " e");
- X *p++ = '\0';
- X i = 4;
- X if (*p == '+')
- X p++;
- X if (*p == '-') {
- X pw_text(pw, pw_width - i-- * DIGIT_WIDTH, 26, PIX_SRC, d_font, "-");
- X p++;
- X }
- X if (strlen(p) == 2)
- X pw_text(pw, pw_width - i-- * DIGIT_WIDTH, 26, PIX_SRC, d_font, "0");
- X pw_text(pw, pw_width - i * DIGIT_WIDTH, 26, PIX_SRC, d_font, p);
- X if (i - strlen(p) == 1)
- X pw_text(pw, pw_width - DIGIT_WIDTH, 26, PIX_SRC, d_font, " ");
- X }
- X else
- X pw_text(pw, pw_width - 6 * DIGIT_WIDTH, 26, PIX_SRC, d_font, " ");
- X pw_rop(pw, 0, pw_height - DIGIT_HEIGHT + 1, margin(buf), DIGIT_HEIGHT, PIX_SRC|PIX_COLOR(0), NULL, 0, 0);
- X pw_text(pw, margin(buf), 26, PIX_SRC, d_font, buf);
- X }
- X}
- X
- XPUBLIC convert_display()
- X
- X{ char buf[60], *p;
- X int i;
- X
- X if (d_len > 0 || e_len > 0)
- X if (curr_mode == SCIENTIFIC) {
- X strcpy(buf, d_str);
- X strcat(buf, "E");
- X strcat(buf, e_str);
- X v_stack[v_top] = atof(buf);
- X }
- X else {
- X for (i = 0, p = d_str; *p; p++)
- X i = i * curr_base + (index(digit, *p) - digit);
- X v_stack[v_top] = (double) i;
- X }
- X edit_ee = FALSE;
- X clear_entry();
- X}
- X
- XPUBLIC convert_value(val, s)
- X
- Xdouble val;
- Xchar *s;
- X
- X{ unsigned int i;
- X int start, exp, dp, sign = 1, j, sp;
- X char *p, *q, buf[60];
- X
- X if (curr_mode == SCIENTIFIC) {
- X sprintf(s, " %-20.15E", val);
- X if (!verify(s, " 0123456789eE+-.")) {
- X strcpy(s, "NaN");
- X return;
- X }
- X if (s[30] == '-') {
- X sign = -1;
- X strcpy(&(s[30]), &(s[31]));
- X }
- X start = 30;
- X sscanf(&(s[start + 18]), "%d", &exp);
- X s[start + 17] = '\0';
- X strcpy(&(s[start + 1]), &(s[start + 2])); /* lose the decimal point */
- X exp++; /* and remember it */
- X if (s[start + 13] >= '5') /* round up */
- X for (i = start + 12; ; i--) {
- X s[i]++;
- X if (s[i] == ':') {
- X s[i] = '0';
- X if (i == start) {
- X s[--start] = '1';
- X exp++;
- X break;
- X }
- X }
- X else
- X break;
- X }
- X s[start + 13] = '\0'; /* retain 13 digits */
- X s[start - 1] = s[start];
- X s[start--] = '.';
- X exp--;
- X dp = start + 1;
- X if (ee_mode || exp > 12 || exp < ((curr_width[0] == -1)? -12 : -curr_width[0])) {
- X if (eng_mode)
- X for ( ; exp % 3; dp++, exp--) {
- X s[dp] = s[dp + 1];
- X s[dp + 1] = '.';
- X }
- X if (curr_width[0] != -1) {
- X i = strlen(s + dp + 1);
- X if (i > curr_width[0])
- X s[dp + curr_width[0] + 1] = '\0';
- X }
- X else
- X for (i = strlen(s) - 1; s[i] == '0'; s[i--] = '\0')
- X ;
- X if (s[i = strlen(s) - 1] == '.')
- X s[i] = '\0';
- X sprintf(s + strlen(s), "E%03d", exp);
- X }
- X else {
- X for ( ; exp > 0; dp++, exp--) {
- X s[dp] = s[dp + 1];
- X s[dp + 1] = '.';
- X }
- X for ( ; exp < 0; dp--, exp++) {
- X s[dp] = s[dp - 1];
- X s[dp - 1] = '.';
- X s[dp - 2] = '0';
- X start = dp - 2;
- X }
- X if (curr_width[0] != -1) {
- X i = strlen(s + dp + 1);
- X if (i > curr_width[0])
- X s[dp + curr_width[0] + 1] = '\0';
- X else
- X for ( ; i < curr_width[0]; i++)
- X strcat(s, "0");
- X if (strlen(s + start) > 14)
- X s[start + 14] = '\0';
- X }
- X else {
- X for (i = strlen(s) - 1; s[i] == '0'; s[i--] = '\0');
- X if (strlen(s + dp + 1) > 12)
- X s[dp + 13] = '\0';
- X if (s[i = strlen(s) - 1] == '.')
- X s[i] = '\0';
- X }
- X }
- X if (sign == -1)
- X s[--start] = '-';
- X strcpy(s, s + start);
- X }
- X else {
- X i = (unsigned int) val;
- X i &= ((unsigned) 0xffffffff) >> (32 - curr_width[index_of(curr_base)]);
- X for (p = buf; i; i = i >> index_of(curr_base))
- X *p++ = digit[i & (curr_base - 1)];
- X *p = '\0';
- X if (*buf == '\0')
- X strcpy(buf, "0");
- X for (j = strlen(buf) - 1, p = s; j >= 0; j--, p++)
- X *p = buf[j];
- X *p = '\0';
- X }
- X}
- X
- X
- XPUBLIC fix_proc(item, event)
- X
- XPanel_item item;
- XEvent *event;
- X
- X{ static Menu s_menu = NULL;
- X static Menu b_menu = NULL;
- X static Menu h_menu = NULL;
- X static Menu t_menu = NULL;
- X int i;
- X
- X if (event_id(event) >= ASCII_FIRST && event_id(event) <= ASCII_LAST) {
- X keyboard(event_id(event));
- X return;
- X }
- X if ((event_id(event) == MS_LEFT && !inverted) || (event_id(event) == MS_MIDDLE && inverted))
- X if (curr_mode == SCIENTIFIC)
- X if (curr_width[0] == 12)
- X curr_width[0] = -1;
- X else
- X curr_width[0]++;
- X else
- X switch (curr_base) {
- X case BINARY : if (curr_width[1] == 16)
- X curr_width[1] = 4;
- X else
- X curr_width[1] *= 2;
- X break;
- X case OCTAL :
- X case HEXADECIMAL : if (curr_width[index_of(curr_base)] == 32)
- X curr_width[index_of(curr_base)] = 8;
- X else
- X curr_width[index_of(curr_base)] *= 2;
- X break;
- X }
- X else if (curr_mode == SCIENTIFIC && ((event_id(event) == MS_LEFT && inverted) || (event_id(event) == MS_MIDDLE && !inverted)))
- X if (trig_mode == GRAD)
- X trig_mode = DEG;
- X else
- X trig_mode++;
- X else if (event_id(event) == MS_RIGHT) {
- X if (inverted) {
- X if (t_menu == NULL)
- X t_menu = menu_create(MENU_INITIAL_SELECTION, MENU_DEFAULT,
- X MENU_ITEM, MENU_STRING, "Degrees", MENU_VALUE, 1, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "Radians", MENU_VALUE, 2, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "Grads", MENU_VALUE, 3, MENU_FONT, key_font, 0,
- X 0);
- X menu_set(t_menu, MENU_DEFAULT, trig_mode + 1, 0);
- X if ((i = (int) menu_show(t_menu, keys, event, 0)) != 0)
- X trig_mode = i - 1;
- X }
- X else if (curr_mode == SCIENTIFIC) {
- X if (s_menu == NULL)
- X s_menu = menu_create(MENU_INITIAL_SELECTION, MENU_DEFAULT,
- X MENU_ITEM, MENU_STRING, " Float", MENU_VALUE, 1, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 0 Digits", MENU_VALUE, 2, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 1 Digit", MENU_VALUE, 3, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 2 Digits", MENU_VALUE, 4, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 3 Digits", MENU_VALUE, 5, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 4 Digits", MENU_VALUE, 6, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 5 Digits", MENU_VALUE, 7, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 6 Digits", MENU_VALUE, 8, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 7 Digits", MENU_VALUE, 9, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 8 Digits", MENU_VALUE, 10, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 9 Digits", MENU_VALUE, 11, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "10 Digits", MENU_VALUE, 12, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "11 Digits", MENU_VALUE, 13, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "12 Digits", MENU_VALUE, 14, MENU_FONT, key_font, 0,
- X 0);
- X menu_set(s_menu, MENU_DEFAULT, curr_width[0] + 2, 0);
- X if ((i = (int) menu_show(s_menu, keys, event, 0)) != 0)
- X curr_width[0] = i - 2;
- X }
- X else if (curr_base == BINARY) {
- X if (b_menu == NULL)
- X b_menu = menu_create(MENU_INITIAL_SELECTION, MENU_DEFAULT,
- X MENU_ITEM, MENU_STRING, " 4 Bits", MENU_VALUE, 4, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, " 8 Bits", MENU_VALUE, 8, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "16 Bits", MENU_VALUE, 16, MENU_FONT, key_font, 0,
- X 0);
- X menu_set(b_menu, MENU_DEFAULT_ITEM, menu_find(b_menu, MENU_VALUE, curr_width[1], 0), 0);
- X if ((i = (int) menu_show(b_menu, keys, event, 0)) != 0)
- X curr_width[1] = i;
- X }
- X else {
- X if (h_menu == NULL)
- X h_menu = menu_create(MENU_INITIAL_SELECTION, MENU_DEFAULT,
- X MENU_ITEM, MENU_STRING, " 8 Bits", MENU_VALUE, 8, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "16 Bits", MENU_VALUE, 16, MENU_FONT, key_font, 0,
- X MENU_ITEM, MENU_STRING, "32 Bits", MENU_VALUE, 32, MENU_FONT, key_font, 0,
- X 0);
- X menu_set(h_menu, MENU_DEFAULT_ITEM, menu_find(h_menu, MENU_VALUE, curr_width[index_of(curr_base)], 0), 0);
- X if ((i = (int) menu_show(h_menu, keys, event, 0)) != 0)
- X curr_width[index_of(curr_base)] = i;
- X }
- X }
- X convert_display();
- X update_display();
- X if (inverted)
- X invert_proc();
- X}
- X
- Xdo_digit(op)
- X
- Xint op;
- X
- X{ char temp[60];
- X
- X if (op <= DIGIT_F) {
- X if (edit_ee && e_len > 0) {
- X e_str[e_len - 3] = e_str[e_len - 2];
- X e_str[e_len - 2] = e_str[e_len - 1];
- X e_str[e_len - 1] = digit[op];
- X }
- X else if (d_len == 1 && d_str[0] == '0')
- X d_str[0] = digit[op];
- X else if (d_len < MAX_DIGITS) {
- X d_str[d_len] = digit[op];
- X d_str[++d_len] = '\0';
- X }
- X }
- X else if (op == DIGIT_DOT) {
- X if (e_len == 0 && index(d_str, '.') == 0) {
- X if (d_len == 0) {
- X strcpy(d_str, "0.");
- X d_len = 2;
- X }
- X else {
- X d_str[d_len] = '.';
- X d_str[++d_len] = '\0';
- X }
- X }
- X }
- X else if (op == DIGIT_CHS) {
- X if (edit_ee && e_len > 0)
- X if (e_len == 4) {
- X strcpy(e_str, e_str + 1);
- X e_len = 3;
- X }
- X else {
- X e_str[3] = e_str[2];
- X e_str[2] = e_str[1];
- X e_str[1] = e_str[0];
- X e_str[0] = '-';
- X e_len = 4;
- X }
- X else {
- X if (d_len == 0)
- X convert_stacktop();
- X if (curr_mode == SCIENTIFIC) {
- X if (d_len > 0 && strcmp(d_str, "0") != 0)
- X if (d_str[0] == '-') {
- X strcpy(d_str, d_str + 1);
- X d_len -= 1;
- X }
- X else {
- X strcpy(temp, d_str);
- X d_str[0] = '-';
- X strcpy(d_str + 1, temp);
- X d_len += 1;
- X }
- X }
- X else {
- X convert_display();
- X v_stack[v_top] = -v_stack[v_top];
- X convert_stacktop();
- X }
- X }
- X }
- X else if (op == DIGIT_EE) {
- X ee_mode = TRUE;
- X edit_ee = !edit_ee;
- X if (d_len == 0)
- X convert_stacktop();
- X if (e_len == 0) {
- X e_len = 3;
- X strcpy(e_str, "000");
- X }
- X }
- X update_display();
- X}
- X
- XPUBLIC clear_entry()
- X
- X{
- X e_str[e_len = 0] = d_str[d_len = 0] = '\0';
- X edit_ee = FALSE;
- X}
- X
- XPUBLIC keyboard(key)
- X
- Xchar key;
- X
- X{ double temp;
- X
- X switch (key) {
- X case '0' :
- X case '1' :
- X case '2' :
- X case '3' :
- X case '4' :
- X case '5' :
- X case '6' :
- X case '7' :
- X case '8' :
- X case '9' : if (curr_mode == SCIENTIFIC || (key - '0' + DIGIT_0 < curr_base))
- X do_digit(blink(key - '0' + DIGIT_0));
- X break;
- X case 'A' :
- X case 'B' :
- X case 'C' :
- X case 'D' :
- X case 'F' : if (curr_mode == PROGRAMMER && curr_base == HEXADECIMAL)
- X do_digit(blink(key - 'A' + DIGIT_A));
- X break;
- X case 'a' :
- X case 'b' :
- X case 'c' :
- X case 'd' :
- X case 'f' : if (curr_mode == PROGRAMMER && curr_base == HEXADECIMAL)
- X do_digit(blink(key - 'a' + DIGIT_A));
- X break;
- X case 'e' :
- X case 'E' : if (curr_mode == PROGRAMMER && curr_base == HEXADECIMAL)
- X do_digit(blink(DIGIT_E));
- X else if (curr_mode == SCIENTIFIC)
- X do_digit(blink(DIGIT_EE));
- X break;
- X case 'g' :
- X case 'G' : blink(EXC_OP);
- X convert_display();
- X do_exchange(0);
- X break;
- X case 'r' :
- X case 'R' : blink(RCL_OP);
- X clear_entry();
- X do_recall(0);
- X break;
- X case 's' :
- X case 'S' : blink(STO_OP);
- X convert_display();
- X do_store(0);
- X break;
- X case '.' : if (curr_mode == SCIENTIFIC)
- X do_digit(blink(DIGIT_DOT));
- X break;
- X case '+' : do_binary(blink(ADD_OP));
- X break;
- X case '-' : do_binary(blink(SUB_OP));
- X break;
- X case 'x' :
- X case 'X' :
- X case '*' : do_binary(blink(MUL_OP));
- X break;
- X case '/' : do_binary(blink(DIV_OP));
- X break;
- X case '&' : if (curr_mode == PROGRAMMER)
- X do_binary(blink(AND_OP));
- X break;
- X case '|' : if (curr_mode == PROGRAMMER)
- X do_binary(blink(OR_OP));
- X break;
- X case '^' : if (curr_mode == PROGRAMMER)
- X do_binary(blink(XOR_OP));
- X break;
- X case '\n':
- X case '\r':
- X case '=' : do_unary(blink(EQUAL_OP));
- X break;
- X case '(' : do_unary(blink(LPAREN_OP));
- X break;
- X case ')' : do_unary(blink(RPAREN_OP));
- X break;
- X }
- X}
- X
- SHAR_EOF
- if test 19031 -ne "`wc -c < 'display.c'`"
- then
- echo shar: error transmitting "'display.c'" '(should have been 19031 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'globals.c'" '(1651 characters)'
- if test -f 'globals.c'
- then
- echo shar: will not over-write existing file "'globals.c'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'globals.c'
- X/************************************************************************/
- X/* Copyright 1988 by Chuck Musciano and Harris Corporation */
- X/* */
- X/* Permission to use, copy, modify, and distribute this software */
- X/* and its documentation for any purpose and without fee is */
- X/* hereby granted, provided that the above copyright notice */
- X/* appear in all copies and that both that copyright notice and */
- X/* this permission notice appear in supporting documentation, and */
- X/* that the name of Chuck Musciano and Harris Corporation not be */
- X/* used in advertising or publicity pertaining to distribution */
- X/* of the software without specific, written prior permission. */
- X/* Chuck Musciano and Harris Corporation make no representations */
- X/* about the suitability of this software for any purpose. It is */
- X/* provided "as is" without express or implied warranty. */
- X/************************************************************************/
- X
- X/************************************************************************/
- X/* */
- X/* Module: globals.c */
- X/* */
- X/* Function: Define global variables */
- X/* */
- X/* Change History: 14 Nov 86 Creation */
- X/* */
- X/************************************************************************/
- X
- X#include "manifest.h"
- X#include "globals.h"
- X
- Xint curr_mode = SCIENTIFIC;
- Xint inverted = FALSE;
- Xint temp_inverted = FALSE;
- X
- Xint curr_base = DECIMAL;
- Xint ee_mode = FALSE;
- Xint eng_mode = FALSE;
- Xint edit_ee = FALSE;
- Xint trig_mode = DEG;
- Xint curr_width[5] = {-1, 16, 0, 32, 32};
- X
- Xdouble v_stack[MAX_STACK] = {0.0};
- Xint o_stack[MAX_STACK] = {0};
- Xint v_top = 0;
- Xint o_top = 0;
- SHAR_EOF
- if test 1651 -ne "`wc -c < 'globals.c'`"
- then
- echo shar: error transmitting "'globals.c'" '(should have been 1651 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'globals.h'" '(1581 characters)'
- if test -f 'globals.h'
- then
- echo shar: will not over-write existing file "'globals.h'"
- else
- sed 's/^ X//' << \SHAR_EOF > 'globals.h'
- X/************************************************************************/
- X/* Copyright 1988 by Chuck Musciano and Harris Corporation */
- X/* */
- X/* Permission to use, copy, modify, and distribute this software */
- X/* and its documentation for any purpose and without fee is */
- X/* hereby granted, provided that the above copyright notice */
- X/* appear in all copies and that both that copyright notice and */
- X/* this permission notice appear in supporting documentation, and */
- X/* that the name of Chuck Musciano and Harris Corporation not be */
- X/* used in advertising or publicity pertaining to distribution */
- X/* of the software without specific, written prior permission. */
- X/* Chuck Musciano and Harris Corporation make no representations */
- X/* about the suitability of this software for any purpose. It is */
- X/* provided "as is" without express or implied warranty. */
- X/************************************************************************/
- X
- X/************************************************************************/
- X/* */
- X/* Module: globals.h */
- X/* */
- X/* Function: Define global variables */
- X/* */
- X/* Change History: 14 Nov 86 Creation */
- X/* */
- X/************************************************************************/
- X
- XPUBLIC int curr_mode;
- XPUBLIC int inverted;
- XPUBLIC int temp_inverted;
- X
- XPUBLIC int curr_base;
- XPUBLIC int ee_mode;
- XPUBLIC int eng_mode;
- XPUBLIC int edit_ee;
- XPUBLIC int trig_mode;
- XPUBLIC int curr_width[5];
- X
- XPUBLIC double v_stack[MAX_STACK];
- XPUBLIC int o_stack[MAX_STACK];
- XPUBLIC int v_top;
- XPUBLIC int o_top;
- SHAR_EOF
- if test 1581 -ne "`wc -c < 'globals.h'`"
- then
- echo shar: error transmitting "'globals.h'" '(should have been 1581 characters)'
- fi
- fi # end of overwriting check
- # End of shell archive
- exit 0
-